home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!cs.utexas.edu!tut.cis.ohio-state.edu!cica!iuvax!rutgers!aramis.rutgers.edu!dartagnan.rutgers.edu!mcgrew
- From: mcgrew@dartagnan.rutgers.edu (Charles Mcgrew)
- Newsgroups: comp.sources.sun
- Subject: v01i042: Patch #1 to Calctool
- Message-ID: <Jul.12.16.07.54.1989.4792@dartagnan.rutgers.edu>
- Date: 12 Jul 89 20:07:58 GMT
- Organization: Rutgers Univ., New Brunswick, N.J.
- Lines: 186
- Approved: mcgrew@aramis.rutgers.edu
-
- Submitted-by: chuck@trantor.harris-atd.com (Chuck Musciano)
- Posting-number: Volume 1, Issue 41
- Archive-name: calctool/patch01
-
- This patch fixes code which causes the C compiler on 386i machines
- to go into an infinite loop. Apparently, the 386i compiler cannot handle
- casting (double *) to (unsigned int) in some cases.
-
- If there are any problems with this patch, please let me know, since I
- do not have access to a 386i for testing purposes.
-
- Chuck Musciano ARPA : chuck@trantor.harris-atd.com
- Harris Corporation Usenet: ...!uunet!x102a!trantor!chuck
- PO Box 37, MS 3A/1912 AT&T : (407) 727-6131
- Melbourne, FL 32902 FAX : (407) 727-{5118,5227,4004}
-
- Oh yeah, laugh now! But when the millions start pouring in, I'll be the one
- at Burger King, sucking down Whoppers at my own private table! --Al Bundy
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of shell archive."
- # Contents: patch
- # Wrapped by chuck@melmac on Tue Jul 11 11:17:07 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'patch' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'patch'\"
- else
- echo shar: Extracting \"'patch'\" \(7011 characters\)
- sed "s/^X//" >'patch' <<'END_OF_FILE'
- X*** ops.c.orig Tue Jul 11 10:56:04 1989
- X--- ops.c Tue Jul 11 11:07:49 1989
- X***************
- X*** 36,53 ****
- X
- X #define low_order(b, x) ((((unsigned) 0xffffffff) >> (32 - (b))) & (x))
- X
- X PRIVATE pop_op()
- X
- X { int i, temp;
- X
- X if (curr_mode != SCIENTIFIC && o_stack[o_top - 1]) {
- X! v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) v_stack[v_top]);
- X! v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) v_stack[v_top - 1]);
- X }
- X switch (o_stack[--o_top]) {
- X case ADD_OP : v_stack[v_top - 1] += v_stack[v_top];
- X break;
- X! case AND_OP : temp = ((unsigned int) v_stack[v_top - 1]) & ((unsigned int) v_stack[v_top]);
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case DIV_OP : v_stack[v_top - 1] /= v_stack[v_top];
- X--- 36,62 ----
- X
- X #define low_order(b, x) ((((unsigned) 0xffffffff) >> (32 - (b))) & (x))
- X
- X+ /************************************************************************/
- X+ /* In the following code, the apparently extraneous assignments */
- X+ /* to vt1 and vt2 are used to circumvent a bug in the 386i C compiler */
- X+ /* which hangs when trying to compile code which casts a (double *) to */
- X+ /* (unsigned int). Sigh... */
- X+ /************************************************************************/
- X+
- X+ PRIVATE double vt1, vt2;
- X+
- X PRIVATE pop_op()
- X
- X { int i, temp;
- X
- X if (curr_mode != SCIENTIFIC && o_stack[o_top - 1]) {
- X! v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) (vt1 = v_stack[v_top]));
- X! v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], (unsigned int) (vt2 = v_stack[v_top - 1]));
- X }
- X switch (o_stack[--o_top]) {
- X case ADD_OP : v_stack[v_top - 1] += v_stack[v_top];
- X break;
- X! case AND_OP : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) & ((unsigned int) (vt2 = v_stack[v_top]));
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case DIV_OP : v_stack[v_top - 1] /= v_stack[v_top];
- X***************
- X*** 54,86 ****
- X break;
- X case LPAREN_OP : return;
- X break;
- X! case LSL_OP : temp = ((unsigned int) v_stack[v_top - 1]) << ((unsigned int) v_stack[v_top]);
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case MUL_OP : v_stack[v_top - 1] *= v_stack[v_top];
- X break;
- X! case OR_OP : temp = ((unsigned int) v_stack[v_top - 1]) | ((unsigned int) v_stack[v_top]);
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X! case ROL_OP : for (i = (unsigned int) v_stack[v_top], temp = (unsigned int) v_stack[v_top - 1]; i; i--)
- X temp = (temp << 1) + ((((unsigned) temp) >> (curr_width[index_of(curr_base)] - 1)) & 1);
- X v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
- X break;
- X case ROOT_OP : v_stack[v_top - 1] = pow(v_stack[v_top - 1], 1.0 / v_stack[v_top]);
- X break;
- X! case ROR_OP : for (i = (unsigned int) v_stack[v_top], temp = (unsigned int) v_stack[v_top - 1]; i; i--)
- X temp = (((unsigned) temp) >> 1) + ((temp & 1) << (curr_width[index_of(curr_base)] - 1));
- X v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
- X break;
- X! case RSA_OP : temp = ((unsigned int) v_stack[v_top - 1]) >> ((unsigned int) v_stack[v_top]);
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X! case RSL_OP : temp = ((unsigned int) ((unsigned int) v_stack[v_top - 1])) >> ((unsigned int) v_stack[v_top]);
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case SUB_OP : v_stack[v_top - 1] -= v_stack[v_top];
- X break;
- X! case XOR_OP : temp = ((unsigned int) v_stack[v_top - 1]) ^ ((unsigned int) v_stack[v_top]);
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case Y2X_OP : v_stack[v_top - 1] = pow(v_stack[v_top - 1], v_stack[v_top]);
- X--- 63,95 ----
- X break;
- X case LPAREN_OP : return;
- X break;
- X! case LSL_OP : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) << ((unsigned int) (vt2 = v_stack[v_top]));
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case MUL_OP : v_stack[v_top - 1] *= v_stack[v_top];
- X break;
- X! case OR_OP : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) | ((unsigned int) (vt2 = v_stack[v_top]));
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X! case ROL_OP : for (i = (unsigned int) (vt1 = v_stack[v_top]), temp = (unsigned int) (vt2 = v_stack[v_top - 1]); i; i--)
- X temp = (temp << 1) + ((((unsigned) temp) >> (curr_width[index_of(curr_base)] - 1)) & 1);
- X v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
- X break;
- X case ROOT_OP : v_stack[v_top - 1] = pow(v_stack[v_top - 1], 1.0 / v_stack[v_top]);
- X break;
- X! case ROR_OP : for (i = (unsigned int) (vt1 = v_stack[v_top]), temp = (unsigned int) (vt2 = v_stack[v_top - 1]); i; i--)
- X temp = (((unsigned) temp) >> 1) + ((temp & 1) << (curr_width[index_of(curr_base)] - 1));
- X v_stack[v_top - 1] = (double) low_order(curr_width[index_of(curr_base)], temp);
- X break;
- X! case RSA_OP : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) >> ((unsigned int) (vt2 = v_stack[v_top]));
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X! case RSL_OP : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) >> ((unsigned int) (vt2 = v_stack[v_top]));
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case SUB_OP : v_stack[v_top - 1] -= v_stack[v_top];
- X break;
- X! case XOR_OP : temp = ((unsigned int) (vt1 = v_stack[v_top - 1])) ^ ((unsigned int) (vt2 = v_stack[v_top]));
- X v_stack[v_top - 1] = (double) temp;
- X break;
- X case Y2X_OP : v_stack[v_top - 1] = pow(v_stack[v_top - 1], v_stack[v_top]);
- X***************
- X*** 199,205 ****
- X break;
- X case LOG_OP : v_stack[v_top] = log10(v_stack[v_top]);
- X break;
- X! case NOT_OP : v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (~ (unsigned int) v_stack[v_top]));
- X break;
- X case OVER_OP : v_stack[v_top] = 1.0 / v_stack[v_top];
- X break;
- X--- 208,214 ----
- X break;
- X case LOG_OP : v_stack[v_top] = log10(v_stack[v_top]);
- X break;
- X! case NOT_OP : v_stack[v_top] = (double) low_order(curr_width[index_of(curr_base)], (~ (unsigned int) (vt1 = v_stack[v_top])));
- X break;
- X case OVER_OP : v_stack[v_top] = 1.0 / v_stack[v_top];
- X break;
- END_OF_FILE
- if test 7011 -ne `wc -c <'patch'`; then
- echo shar: \"'patch'\" unpacked with wrong size!
- fi
- # end of 'patch'
- fi
- echo shar: End of shell archive.
- exit 0
-
- Chuck Musciano ARPA : chuck@trantor.harris-atd.com
- Harris Corporation Usenet: ...!uunet!x102a!trantor!chuck
- PO Box 37, MS 3A/1912 AT&T : (407) 727-6131
- Melbourne, FL 32902 FAX : (407) 727-{5118,5227,4004}
-
- Oh yeah, laugh now! But when the millions start pouring in, I'll be the one
- at Burger King, sucking down Whoppers at my own private table! --Al Bundy
-